package cn.biplam.common.paramters;

import cn.biplam.common.wrapper.ErrorMessage;

/**
 * 公共元数据管理常量定义类
 */
public class MdParam {
	
	/** 业务模型索引表名称*/
	public static final String Table_Name="MODEL_INDEX";
	/** 业务模型虚根ID */
	public static final String Virtual_Root_ID="-1";
	
	/** Erwin导入模板文件Download_ID*/
	public static final String Erwin_Import_Template_File_ID="ERWINIMPORT";
	/** 模型名称导入模板文件Download_ID*/
	public static final String Md_Name_Import_Template_File_ID="MDNAMEIMPORT";
	
	/** 主键 */
	public static final String PK = "11";
	/** 外键 */
	public static final String FK = "21";
	/** 字段 */
	public static final String Field = "216";
	/** 添加字段 */
	public static final String Add_Field = "4";
	
	/** 物理名称 */
	public static final String Phisical_Name = "16";
	/** 逻辑名称 */
	public static final String Logic_Name = "265";
	/** NO */
	public static final String NO = "NO";
	/** 字段批量停用 */
	public static final String Exclude_Batch = "341";
	/** 关联类型 */
	public static final String Relation_Type = "253";
	/** 扫描数据源 */
	public static final String Scan_Database = "284";
	
	/**
	 * 是否允许为空
	 */
	public enum Is_Null{
		/** 不允许为空 */
		NOT_NULL("0"),
		/** 允许为空 */
		NULL("1");
		private String value;
		private Is_Null(String value){this.value=value;}
		public String toString() {return value;}
	}
	
	/**
	 * 是否主键
	 */
	public enum Is_Pk{
		/** 不是主键 */
		NO("0"),
		/** 是主键 */
		YES("1");
		private String value;
		private Is_Pk(String value){this.value=value;}
		public String toString() {return value;}
	}
	/**
	 * 是否外键
	 */
	public enum Is_Fk{
		/** 不是外键 */
		NO("0"),
		/** 是外键 */
		YES("1");
		private String value;
		private Is_Fk(String value){this.value=value;}
		public String toString() {return value;}
	}
	
	/**
	 * 选择标志
	 */
	public enum Choice_Flag {
		/** 不选择 */
		Un_Choice("0"), 
		/** 选择 */
		Choice("1");
		
		private String value;
		private Choice_Flag(String value) {
			this.value = value;
		}
		public String toString() {
			return value;
		}
	}
	
	/**
	 * 字段状态
	 */
	public enum Col_State{
		/** 未知 */
		UN_KNOWN("0"),
		/** 启用 */
		VALID("1"),
		/** 停用 */
		INVALID("2");
		private String value;
		private Col_State(String value){this.value=value;}
		public String toString() {return value;}
	}

	/**
	 * 节点移动类型,用于节点移动时指定移动方式<br>
	 * <ul>移动方式有：
	 * <li>移动到节点前
	 * <li>移动到节点后
	 * <li>移动到节点儿子
	 * </ul> 
	 */
	public enum Index_Node_Move_Type{
		/** 移动到节点前 */
		Move_After("1"),
		/** 移动到节点后 */
		Move_Before("2"),
		/** 移动到节点儿子尾 */
		Move_Child_End("3"),
		/** 移动到节点儿子头 */
		Move_Child_Head("4");
		private String value;
		private Index_Node_Move_Type(String value){this.value=value;}
		public String toString() {return value;}
	}
	
	/**
	 * 外键关系中表角色
	 */
	public enum Fk_Table_Role{
		/** 外键表 */
		Foreign_Table,
		/** 主键表 */
		Main_Table;
		
		/**返回主外键表缩写名称(P)/(FK)*/
		public static String getTableName(Fk_Table_Role role) throws ErrorMessage{
			switch(role){
			case Foreign_Table:
				return "(FK)";
			case Main_Table:
				return "(P)";
			}
			throw new ErrorMessage("Unknown Fk_Table_Role Type("+role+")");
		}
	}
}


